Các mô hình bộ nhớ Địa chỉ bộ nhớ

Nhiều lập trình viên ưa thích cách gán địa chỉ bộ nhớ sao cho không có sự khác biệt giữa vùng mã và vùng dữ liệu (xem ở trên), cũng như giữa bộ nhớ vật lý và bộ nhớ ảo (xem bên dưới) - nói cách khác, các con trỏ như nhau về giá trị trỏ tới đúng cùng một byte của RAM.

Tuy nhiên, nhiều máy tính thời đầu không hỗ trợ mô hình bộ nhớ phẳng như vậy - đặc biệt, các máy kiến trúc Harvard bắt bộ nhớ chương trình phải hoàn toàn tách biệt với bộ nhớ dữ liệu. Nhiều bộ xử lý tín hiệu số hiện đại (chẳng hạn như Motorola 56000) có ba vùng nhớ riêng biệt - bộ nhớ chương trình, bộ nhớ hệ số và bộ nhớ dữ liệu. Một số lệnh thường dùng tìm nạp đồng thời từ cả ba vùng - ít vùng nhớ hơn (mặc dù tổng số byte bộ nhớ vẫn như vậy) sẽ làm cho các lệnh đó chạy chậm hơn.

Các mô hình bộ nhớ trong kiến trúc x86

Các máy tính x86 đầu tiên sử dụng loại địa chỉ phân đoạn gồm hai số: phân đoạn bộ nhớ + độ lệch trong phân đoạn đó.

Một số phân đoạn có thể ngầm định là phân đoạn mã, dành riêng cho lệnh, hoặc phân đoạn ngăn xếp hoặc phân đoạn dữ liệu bình thường. Mặc dù cách sử dụng khác nhau, việc các phân đoạn này không có cơ chế bảo vệ bộ nhớ khác nhau phản ánh điều này. Trong mô hình bộ nhớ tuyến tính tất cả các phân đoạn (hay thanh ghi phân đoạn) thường được đặt bằng 0, và độ lệch là biến số.